<!--

    The contents of this file are subject to the license and copyright
    detailed in the LICENSE and NOTICE files at the root of the source
    tree and available online at

    http://www.dspace.org/license/

-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<!--
  Author:   Robert Tansley
  Version:  $Revision: 5844 $
  Date:     $Date: 2010-11-12 00:29:14 -0500 (Fri, 12 Nov 2010) $
-->
</head>
<body bgcolor="white">
The API for programming the DSpace system.

<h2>DSpace System Architecture</h2>

Briefly, DSpace consists of a three-layer architecture:
<P>

<table border="0" cellspacing=0 cellpadding=10>
  <tr>
    <td bgcolor="#fe9693" align="center"><strong>Application Layer</strong></td>
    <td><code>org.dspace.app.*</code></td>
  </tr>
  <tr>
    <td bgcolor="#a9d0ed" align="center"><strong>Business Logic Layer</strong></td>
    <td><code>org.dspace.*</code></td>
  </tr>
  <tr>
    <td bgcolor="#b6ff96" align="center"><strong>Storage Layer</strong></td>
    <td><code>org.dspace.storage.*</code></td>
  </tr>
</table>

<P>
Each layer is divided into subsystems.  These are stored in separate packages.
Only the public API of each subsystem should be used by other subsystems.
Additionally, subsystems in the Application Layer should not use the Storage
Layer directly.
<P>
The top level of each package must contain only public classes and methods that
are part of the public API of the subsystem.  This way, conservative use of
<code>import</code> ensures that subsystems are only using appropriate public
APIs.
<P>
Test classes for subsystems that have automatic self-tests reside in a
<code>test</code> sub-package.  For example, the browse subsystem tests reside
in <code>org.dspace.browse.test</code>.  Such test classes must also have a name
that ends in <code>Test.Java</code>, for example <code>BrowseTest.java</code>.
<P>
Each of the layers and the packages that are part of them are described below.


<h3>Application Layer</h3>

Presently, the application layer consists of:

<ul><li>The Web user interface</li>
<li>The <A href="http://www.openarchives.org/OAI/openarchivesprotocol.html">Open Archives Protocol for Initiative Metadata Harvesting</A> implementation</li>
<li>Item import and export tools</li>
<li>The Media Filter tool, which is a batch tool that iterates through the bitstreams in DSpace, and applies filters to bitstreams of a particular format.  This can be used to e.g. generate image thumbnails, and extract full-text from documents for indexing.</li>
<li>The METS tools -- currently just an exporter, which exports DSpace AIPs with the metadata stored in an XML METS file.  Soon a corresponding importer will be added too.</li>
</ul>
Since this and other applications are
"customers" of DSpace, they do not need to have strictly defined public APIs.  Subsystems in the application layer should be sub-packages of
<code>org.dspace.app</code>.  Subsystems in the application layer should not
use the storage layer directly.


<h3>Business Logic Layer</h3>

This is where the main smarts of the system lie.  It consists of a number of
subsystems, stored in sub-packages of <code>org.dspace</code>, and some core
classes in <code>org.dspace.core</code>.  Sub-packages of org.dspace that are
not in <code>org.dspace.app</code> or <code>org.dspace.storage</code> are
business logic subsystems.
<P>
<code>org.dspace.content</code> (the content management API) is probably the
most useful to applications.  Other subsystems are generally only directly used
by applications providing administrative functionality.


<h3>Storage Layer</h3>

The storage layer currently consists of two subsystems:  The relational
database management system interface, and the bitstore.  These are in
packages <code>org.dspace.storage.rdbms</code> and
<code>org.dspace.storage.bitstore</code> respectively.  Any new storage
subsystems should also be sub-packages of <code>org.dspace.storage</code>.
<P>

<h2>More Information</h2>

<P>More detailed architectural information for the current stable release of DSpace can be found here:</P>

<P><A HREF="http://dspace.org/technology/system-docs/">http://dspace.org/technology/system-docs/</A></P>

<P>If you're using a beta or earlier version of DSpace, you should download the  'dspace-docs' documentation package corresponding to the version you're using from the SourceForge download page:</P>

<P><A HREF="http://sourceforge.net/project/showfiles.php?group_id=19984">http://sourceforge.net/project/showfiles.php?group_id=19984</A></P>

</body>
</html>
